package chaoyue.study.pool;

import java.time.LocalDateTime;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * 延迟任务线程池
 * 核心是依赖延迟队列执行的
 */
public class ScheduledThreadPoolTest {
    public static void main(String[] args) {
        System.out.println("main start... " + LocalDateTime.now());
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(10);
        Runnable task = () -> System.out.println("Task is running at " + LocalDateTime.now());

        // 普通方式提交的任务，此时和普通的线程池是一样的
        //scheduledThreadPool.submit(task);

        // 使用延迟的方式去提交任务，延迟5秒执行
        //scheduledThreadPool.schedule(task, 5, TimeUnit.SECONDS);

        // 延迟1秒执行，并每3秒执行1次（以固定时间为周期，不管任务执行了多久）
        //scheduledThreadPool.scheduleAtFixedRate(task, 1, 3, TimeUnit.SECONDS);

        // 延迟1秒执行，每次任务结束后等待3秒再执行下一次任务（以间隔时间为周期，任务执行时间会影响下一次任务的执行时间）
        scheduledThreadPool.scheduleWithFixedDelay(task, 1, 3, TimeUnit.SECONDS);

        System.out.println("main end... " + LocalDateTime.now());
    }
}
